import os
import random
import piexif
from PIL import Image
import pickle  # 用于存储二进制数据

# 目录路径（包含原始图片的EXIF）
folder_path = r"D:/Desk/文档/相机内容源"
exif_data_file = os.path.join(folder_path, "exif_data.pkl")  # 直接存储 EXIF 二进制数据

# 目标图片路径
target_img = r"D:/Desk/0216-锦洁/oo.jpg"


# **1. 提取 EXIF 信息**
def extract_exif():
    exif_data = {}

    for filename in os.listdir(folder_path):
        if filename.lower().endswith((".jpg", ".jpeg")):
            filepath = os.path.join(folder_path, filename)
            try:
                img = Image.open(filepath)
                exif_dict = piexif.load(img.info.get("exif", b""))

                # **删除缩略图 & 方向信息**
                exif_dict.pop("thumbnail", None)
                exif_dict["0th"].pop(piexif.ImageIFD.Orientation, None)

                exif_data[filename] = exif_dict
                print(f"✅ 提取 {filename} 的 EXIF 信息")

            except Exception as e:
                print(f"❌ 跳过 {filename}，错误：{e}")

    # **使用 pickle 存储 EXIF 数据**
    if exif_data:
        with open(exif_data_file, "wb") as f:
            pickle.dump(exif_data, f)
        print(f"🎉 EXIF 数据已保存到 {exif_data_file}")
    else:
        print("⚠️ 没有可用的 EXIF 数据，文件未创建！")


# **2. 复制随机 EXIF 到新图片**
def apply_exif(target_image):
    if not os.path.exists(exif_data_file):
        print("❌ 没有 EXIF 数据")
        return

    # **使用 pickle 读取 EXIF 数据**
    with open(exif_data_file, "rb") as f:
        exif_data = pickle.load(f)

    if not exif_data:
        print("❌ EXIF 数据为空")
        return

    random_filename, random_exif = random.choice(list(exif_data.items()))  # 随机选取一个 EXIF
    print(f"🎲 选择 {random_filename} 的 EXIF 信息，应用到 {target_image}")

    # **转换为 EXIF 二进制数据**
    try:
        exif_bytes = piexif.dump(random_exif)
        piexif.insert(exif_bytes, target_image)
        print(f"✅ 已将 {random_filename} 的 EXIF 信息写入 {target_image}")
    except Exception as e:
        print(f"❌ 失败：{e}")


# **运行**
# extract_exif()  # 提取 EXIF
apply_exif(target_img)  # 随机应用 EXIF
